﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Collections;
//using System.Configuration;
//using System.Data;
//using System.Diagnostics;

//namespace JiuMeiMall.PMethod
//{
//    /// <summary>
//    /// 异常报告
//    /// </summary>
//    public static class BugReport
//    {
//        #region Email
//        public const int EMAILCONFIG = 1;

//        public const string EMAILUSERPARAMNAME = "EmailUser";

//        public const string EMAILPIDPARAMNAME = "EmailPID";

//        public const string EMAILPWDPARAMNAME = "EmailPWD";

//        public const string OpenAPIBug = "API";

//        public const string DBBug = "DB";

//        public const string TaskBug = "Task";

//        public const string ServerBug = "Server";

//        public const string ClientBug = "Client";

//        public const char MultiEmailSeperator = ',';
//        #endregion

//        /// <summary>
//        /// 日志分界线
//        /// </summary>
//        const string BOUNDARY_LINE = "-----------------------------------------------------";

//        private static Hashtable reports = null;

//        static BugReport()
//        {
//            reports = Hashtable.Synchronized(new Hashtable());
//        }

//        /// <summary>
//        /// 发送邮件
//        /// </summary>
//        /// <param name="to">邮件接收人(多个以"，"分隔)</param>
//        /// <param name="subject">标题</param>
//        /// <param name="body">主题</param>
//        /// <param name="errMsg">错误消息</param>
//        public static bool SendEmail(string to, string subject, string body, out string errMsg)
//        {
//            errMsg = string.Empty;
//            string mailpid = ConfigurationManager.AppSettings[EMAILPIDPARAMNAME];
//            string mailpwd = ConfigurationManager.AppSettings[EMAILPWDPARAMNAME];
//            bool rst = true;
//            if (string.IsNullOrEmpty(to) == false)
//            {
//                try
//                {
//                    Email.SendMailsSoapClient sm = new Email.SendMailsSoapClient();
//                    mailpwd = sm.GetEncryption(to + mailpwd);
//                    sm.sMail(to, subject, body, EMAILCONFIG, mailpid, mailpwd);
//                }
//                catch (Exception ex)
//                {
//                    rst = false;
//                    errMsg = ex.Message;
//                    LogWriter.WriteEx("BugReport.SendEmail", ex);
//                }
//            }
//            return rst;
//        }

//        #region old
//        /// <summary>
//        /// 报告本地异常(邮件通知)
//        /// </summary>
//        /// <param name="msg">自定义消息</param>
//        /// <param name="log">log4net logger</param>
//        /// <param name="type">类型</param>
//        /// <param name="ex">异常</param>
//        public static void ReportLocalError(string msg, log4net.ILog log, string type, Exception ex)
//        {
//            string logType = "ReportClientError";
//            if (log != null)
//            {
//                type = log.Logger.Name;
//            }
//            string key = string.Format("{0}.{1}", ClientBug, type);
//            int count = 1;
//            //是否需要邮件通知(每天的第一次或者发生次数为1,10,50,100,200,201时发送)
//            bool needEmail = false;
//            //是否需要写日志(每天的第一次或者时间间隔超过6分钟的需要写日志)
//            bool needLog = false;
//            DateTime ndt = DateTime.Now;
//            GetReportType(key, ndt, logType, ref count, ref needEmail, ref needLog);

//            string mailto = SysConfig.GetConfig(EMAILUSERPARAMNAME);

//            Func<bool, string> content = (isHtml) =>
//            {
//                return GetServerErrorContent(ndt, type, msg, ex, isHtml, count);
//            };

//            ReportError(mailto,
//                string.Format("时间[{0}]{1}产生异常(第{2}次)", ndt.ToString("yyyy-MM-dd HH:mm:ss"), type, count),
//                content,
//                log,
//                logType,
//                needEmail,
//                needLog);
//        }

//        /// <summary>
//        /// 报告服务器端异常(邮件通知)
//        /// </summary>
//        /// <param name="type">类型</param>
//        /// <param name="log">log4net logger</param>
//        /// <param name="msg">自定义消息</param>
//        /// <param name="ex">异常</param>
//        public static void ReportServerError(string type,log4net.ILog log, string msg, Exception ex)
//        {
//            string logType = "ReportServerError";
//            if (log != null)
//            {
//                type = log.Logger.Name;
//            }
//            string key = string.Format("{0}.{1}", ServerBug, type);
//            int count = 1;
//            //是否需要邮件通知(每天的第一次或者发生次数为1,10,50,100,200,201时发送)
//            bool needEmail = false;
//            //是否需要写日志(每天的第一次或者时间间隔超过6分钟的需要写日志)
//            bool needLog = false;
//            DateTime ndt = DateTime.Now;
//            GetReportType(key, ndt, logType, ref count, ref needEmail, ref needLog);

//            string mailto = SysConfig.GetConfig(EMAILUSERPARAMNAME);

//            Func<bool, string> content = (isHtml) =>
//            {
//                return GetServerErrorContent(ndt, type, msg, ex, isHtml, count);
//            };

//            ReportError(mailto,
//                string.Format("时间[{0}]{1}产生异常(第{2}次)", ndt.ToString("yyyy-MM-dd HH:mm:ss"), type, count),
//                content,
//                log,
//                logType,
//                needEmail,
//                needLog);

//        }

//        /// <summary>
//        /// 报告API操作异常(邮件通知)
//        /// </summary>
//        /// <param name="from">请求项目</param>
//        /// <param name="to">调用项目</param>
//        /// <param name="fromMethod">请求方法</param>
//        /// <param name="toMethod">调用的方法</param>
//        /// <param name="log">log4net logger</param>
//        /// <param name="paras">参数</param>
//        /// <param name="ex">异常</param>
//        public static void ReportAPIError(string from, string to, string fromMethod, string toMethod,log4net.ILog log, Dictionary<string, object> paras, Exception ex)
//        {
//            string key = string.Format("{0}.{1}-{2}", OpenAPIBug, to, toMethod);
//            int count = 1;
//            //是否需要邮件通知(每天的第一次或者发生次数为1,10,50,100,200,201时发送)
//            bool needEmail = false;
//            //是否需要写日志(每天的第一次或者时间间隔超过6分钟的需要写日志)
//            bool needLog = false;
//            string logType = "ReportAPIError";
//            DateTime ndt = DateTime.Now;
//            GetReportType(key, ndt, logType, ref count, ref needEmail, ref needLog);
//            string mailto = GetMailTo(from, to);

//            Func<bool, string> content = (isHtml) =>
//            {
//                return GetOpenAPIErrorContent(ndt, from, to, fromMethod, toMethod, paras, ex, isHtml, count);
//            };

//            ReportError(mailto,
//                string.Format("时间[{0}]{1}-{2}产生异常(第{3}次)", ndt.ToString("yyyy-MM-dd HH:mm:ss"), to, toMethod, count),
//                content,
//                log,
//                logType,
//                needEmail,
//                needLog);
//        }

//        /// <summary>
//        /// 报告数据库操作异常(邮件通知)
//        /// </summary>
//        /// <param name="method">调用的方法</param>
//        /// <param name="sql">执行的sql语句</param>
//        /// <param name="paras">参数</param>
//        /// <param name="ex">异常</param>
//        public static void ReportDBError(string method, log4net.ILog log, string sql, Dictionary<string, object> paras, Exception ex)
//        {
//            string key = string.Format("{0}.{1}", DBBug, method);
//            int count = 1;
//            //是否需要邮件通知(每天的第一次或者发生次数为1,10,50,100,200,201时发送)
//            bool needEmail = false;
//            //是否需要写日志(每天的第一次或者时间间隔超过6分钟的需要写日志)
//            bool needLog = false;
//            string logType = "ReportDBError";
//            DateTime ndt = DateTime.Now;
//            GetReportType(key, ndt, logType, ref count, ref needEmail, ref needLog);

//            string mailto = ConfigurationManager.AppSettings[EMAILUSERPARAMNAME];

//            Func<bool, string> content = (isHtml) =>
//            {
//                return GetDBErrorContent(ndt, method, sql, paras, ex, isHtml, count);
//            };

//            ReportError(ConfigurationManager.AppSettings[EMAILUSERPARAMNAME],
//                string.Format("时间[{0}]{1}产生异常(第{2}次)", ndt.ToString("yyyy-MM-dd HH:mm:ss"), method, count),
//                content,
//                log,
//                logType,
//                needEmail,
//                needLog);

//        }
        
//        /// <summary>
//        /// log4Net编写日志
//        /// </summary>
//        /// <param name="mustEmail">是否必须邮件</param>
//        /// <param name="mustLog">是否必须写日志</param>
//        /// <param name="logType">日志类型</param>
//        /// <param name="paras">参数</param>
//        /// <param name="ex">异常信息</param>
//        /// <param name="message">自定义消息</param>
//        public static void Log4NetExport(bool mustEmail, bool mustLog, Type logType, Dictionary<string, object> paras, Exception ex, string message)
//        {
//            System.Diagnostics.Debug.Assert(logType != null);

//            string key = string.Format("log4.{0}", logType.ToString());
//            int count = 1;
//            //是否需要邮件通知(每天的第一次或者发生次数为1,10,50,100,200,201时发送)
//            bool needEmail = false;
//            //是否需要写日志(每天的第一次或者时间间隔超过6分钟的需要写日志)
//            bool needLog = false;
//            DateTime ndt = DateTime.Now;
//            if (mustEmail)
//            {
//                needEmail = true;
//            }
//            else if (mustLog)
//            {
//                needLog = true;
//            }
//            else
//            {
//                GetReportType(key, ndt, key, ref count, ref needEmail, ref needLog);
//            }
//            string mailto = ConfigurationManager.AppSettings[EMAILUSERPARAMNAME];

//            Func<bool, string> content = (isHtml) =>
//            {
//                return GetLog4NetContent(ndt, paras, ex, message, isHtml, count);
//            };

//            Log4NetReportError(mailto,
//                string.Format("时间[{0}]{1}产生异常(第{2}次)", ndt.ToString("yyyy-MM-dd HH:mm:ss"), logType.ToString(), count),
//                content,
//                logType,
//                needEmail,
//                needLog);
//        }
//        #endregion

//        #region GetContent

//        /// <summary>
//        /// 发送异常报告
//        /// </summary>
//        /// <param name="mailto">邮件接收人</param>
//        /// <param name="mailSubject">邮件标题</param>
//        /// <param name="content">邮件内容(ture为html格式，false为文本格式)</param>
//        /// <param name="log">log4net logger</param>
//        /// <param name="logType">日志名称</param>
//        /// <param name="needEmail">需要发送邮件</param>
//        /// <param name="needLog">需要写日志</param>
//        private static void ReportError(string mailto, string mailSubject, Func<bool, string> content, log4net.ILog log,string logType, bool needEmail, bool needLog)
//        {
//            string mailpid = ConfigurationManager.AppSettings[EMAILPIDPARAMNAME];
//            string mailpwd = ConfigurationManager.AppSettings[EMAILPWDPARAMNAME];
//            bool rst = false;
//            if (string.IsNullOrEmpty(mailto) == false && needEmail)
//            {
//                try
//                {
//                    Email.SendMailsSoapClient mail = new Email.SendMailsSoapClient();
//                    string pwd = mail.GetEncryption(mailto + mailpwd);
//                    mail.sMail(mailto,
//                        mailSubject,
//                        content(true),
//                        EMAILCONFIG,
//                        mailpid,
//                        pwd);
//                    rst = true;
//                }
//                catch (Exception sx)
//                {
//                    LogWriter.WriteEx("ReportError", sx);
//                    rst = false;
//                }
//            }

//            if (rst == false && needLog)
//            {
//                WriteLog(content(false), log, logType);
//            }
//        }

//        /// <summary>
//        /// 发送异常报告
//        /// </summary>
//        /// <param name="mailto">邮件接收人</param>
//        /// <param name="mailSubject">邮件标题</param>
//        /// <param name="content">邮件内容(ture为html格式，false为文本格式)</param>
//        /// <param name="logType">日志类型</param>
//        /// <param name="needEmail">需要发送邮件</param>
//        /// <param name="needLog">需要写日志</param>
//        private static void Log4NetReportError(string mailto, string mailSubject, Func<bool, string> content, Type logType, bool needEmail, bool needLog)
//        {
//            string mailpid = ConfigurationManager.AppSettings[EMAILPIDPARAMNAME];
//            string mailpwd = ConfigurationManager.AppSettings[EMAILPWDPARAMNAME];
//            bool rst = false;
//            if (string.IsNullOrEmpty(mailto) == false && needEmail)
//            {
//                try
//                {
//                    Email.SendMailsSoapClient mail = new Email.SendMailsSoapClient();
//                    string pwd = mail.GetEncryption(mailto + mailpwd);
//                    mail.sMail(mailto,
//                        mailSubject,
//                        content(true),
//                        EMAILCONFIG,
//                        mailpid,
//                        pwd);
//                    rst = true;
//                }
//                catch (Exception sx)
//                {
//                    LogWriter.WriteEx("ReportError", sx);
//                    rst = false;
//                }
//            }

//            if (rst == false && needLog)
//            {
//                WineNiceRest.Util.Log4NetExport.Create(logType).Info(content(false));
//            }
//        }

//        /// <summary>
//        /// 写本地日志
//        /// </summary>
//        /// <param name="content">内容</param>
//        /// <param name="log">log4net logger</param>
//        /// <param name="logType">日志类型</param>
//        private static void WriteLog(string content, log4net.ILog log, string logType)
//        {
//            if (log != null)
//            {
//                if (log.IsDebugEnabled)
//                {
//                    log.Debug(content);
//                }
//                else if (log.IsInfoEnabled)
//                {
//                    log.Info(content);
//                }
//                else if (log.IsWarnEnabled)
//                {
//                    log.Warn(content);
//                }
//                else if (log.IsErrorEnabled)
//                {
//                    log.Error(content);
//                }
//                else if (log.IsFatalEnabled)
//                {
//                    log.Fatal(content);
//                }
//                else
//                {
//                    LogWriter.Write(logType, content);
//                }
//            }
//            else
//            {
//                LogWriter.Write(logType, content);
//            }
//        }

//        /// <summary>
//        /// 获取邮件接收人
//        /// </summary>
//        /// <param name="from">从哪个项目</param>
//        /// <param name="to">到哪一个项目</param>
//        /// <returns></returns>
//        private static string GetMailTo(string from, string to)
//        {
//            string mailto = null;
//            if (!string.IsNullOrEmpty(from))
//            {
//                mailto = ConfigurationManager.AppSettings[from + EMAILUSERPARAMNAME];
//            }

//            if (!string.IsNullOrEmpty(to) && !to.Equals(from))
//            {
//                if (string.IsNullOrEmpty(mailto))
//                {
//                    mailto = ConfigurationManager.AppSettings[to + EMAILUSERPARAMNAME];
//                }
//                else
//                {
//                    string mailto2 = ConfigurationManager.AppSettings[to + EMAILUSERPARAMNAME];
//                    if (string.IsNullOrEmpty(mailto2) == false)
//                    {
//                        IList<string> mls = mailto.Split(new char[] { MultiEmailSeperator }, StringSplitOptions.RemoveEmptyEntries).ToList<string>();
//                        mailto = MultiEmailSeperator.ToString() + mailto + MultiEmailSeperator.ToString();
//                        string[] mls2 = mailto2.Split(new char[] { MultiEmailSeperator }, StringSplitOptions.RemoveEmptyEntries);
//                        foreach (string u in mls2)
//                        {
//                            if (mls.Contains(u, StringComparer.CurrentCultureIgnoreCase) == false)
//                            {
//                                mls.Add(u);
//                            }
//                        }
//                        mailto = string.Join(MultiEmailSeperator.ToString(), mls.ToArray<string>());
//                    }
//                }
//            }

//            //如果项目没有配置
//            if (string.IsNullOrEmpty(mailto))
//            {
//                mailto = ConfigurationManager.AppSettings[EMAILUSERPARAMNAME];
//            }
//            return mailto;
//        }

//        /// <summary>
//        /// 获取报告方式(邮件，本地日志)
//        /// </summary>
//        /// <param name="key">异常键</param>
//        /// <param name="ndt">异常日期</param>
//        /// <param name="logType">日志类型</param>
//        /// <param name="count">异常次数</param>
//        /// <param name="needEmail">是否需要发送邮件</param>
//        /// <param name="needLog">是否需要写日志</param>
//        private static void GetReportType(string key, DateTime ndt, string logType, ref int count, ref bool needEmail, ref bool needLog)
//        {
//            if (reports.ContainsKey(key))
//            {
//                object[] objs = reports[key] as object[];
//                DateTime dt = (DateTime)objs[0];
//                if (dt.Year == ndt.Year
//                    && dt.Month == ndt.Month
//                    && dt.Day == ndt.Day)
//                {
//                    if ((ndt - dt).TotalMinutes > 6)
//                    {
//                        needLog = true;
//                    }
//                    objs[0] = ndt;
//                    count = count + 1;
//                    if (count == 10
//                        || count == 50
//                        || count == 100
//                        || count == 200
//                        || count == 500)
//                    {
//                        needEmail = true;
//                    }
//                }
//                else
//                {
//                    LogWriter.Write(logType, string.Format("{0}类型异常在{1}共发生{2}次", key, dt.ToString("yyyy-MM-dd"), objs[1]));
//                    objs[0] = ndt;
//                    count = 1;
//                    needEmail = true;
//                    needLog = true;
//                }
//                objs[1] = count;
//                reports[key] = objs;
//            }
//            else
//            {
//                reports.Add(key, new object[2] { ndt, count });
//                needEmail = true;
//                needLog = true;
//            }
//        }

//        /// <summary>
//        /// 获取Log4Net消息内容
//        /// </summary>
//        /// <param name="dt">报告时间</param>
//        /// <param name="paras">参数</param>
//        /// <param name="ex">异常</param>
//        /// <param name="message">自定义消息</param>
//        /// <param name="isHtml">是否是HTML输出</param>
//        /// <param name="count">记录总数</param>
//        /// <returns></returns>
//        private static string GetLog4NetContent(DateTime dt,Dictionary<string, object> paras, Exception ex,string message, bool isHtml, int count)
//        {
//            StringBuilder sb = new StringBuilder();
//            string sp = "<br />";
//            if (isHtml == false)
//            {
//                sp = "\r\n";
//            }
//            //\r\n不起作用
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format("{0}异常(第{1}次):", sp, count));
//            if (ex != null)
//            {
//                sb.Append(string.Format(sp + "错误信息:{0}", ex.Message));
//                sb.Append(string.Format(sp + "堆栈跟踪:{0}", ex.StackTrace));
//                if (ex.InnerException != null)
//                {
//                    sb.Append(string.Format(sp + "内部异常:{0}", ex.InnerException));
//                }
//            }
//            else
//            {
//                sb.Append(sp + "没有反馈异常信息.");
//            }
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format(sp + "报告时间：{0}", dt.ToString("yyyy-MM-dd HH:mm:ss")));
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(sp + "参数：");
//            GetErrorParameters(paras, isHtml, sb, sp);
//            sb.Append(sp + BOUNDARY_LINE);
//            if (!string.IsNullOrEmpty(message))
//            {
//                sb.Append(string.Format(sp + "自定义消息：{0}", message));
//                sb.Append(sp + BOUNDARY_LINE);
//            }
//            return sb.ToString();
//        }


//        private static string GetOpenAPIErrorContent(DateTime dt, string from, string to, string fromMethod, string toMethod, Dictionary<string, object> paras, Exception ex, bool isHtml, int count)
//        {
//            StringBuilder sb = new StringBuilder();
//            string sp = "<br />";
//            if (isHtml == false)
//            {
//                sp = "\r\n";
//            }
//            //\r\n不起作用
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format("{0}异常(第{1}次):", sp, count));
//            if (ex != null)
//            {
//                sb.Append(string.Format(sp + "错误信息:{0}", ex.Message));
//                sb.Append(string.Format(sp + "堆栈跟踪:{0}", ex.StackTrace));
//                if (ex.InnerException != null)
//                {
//                    sb.Append(string.Format(sp + "内部异常:{0}", ex.InnerException));
//                }
//            }
//            else
//            {
//                sb.Append(sp + "没有反馈异常信息.");
//            }
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format(sp + "报告时间：{0}", dt.ToString("yyyy-MM-dd HH:mm:ss")));
//            sb.Append(string.Format(sp + "客户端IP：{0}", SysHelper.LocalIP));
//            sb.Append(string.Format(sp + "客户端OS：{0}", Environment.OSVersion.ToString()));
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format(sp + "请求项目：{0}", from));
//            sb.Append(string.Format(sp + "调用项目：{0}", to));
//            sb.Append(string.Format(sp + "请求方法名：{0}", fromMethod));
//            sb.Append(string.Format(sp + "调用方法名：{0}", toMethod));
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(sp + "参数：");
//            GetErrorParameters(paras, isHtml, sb, sp);
//            sb.Append(sp + BOUNDARY_LINE);

//            return sb.ToString();
//        }

//        private static string GetDBErrorContent(DateTime dt, string method, string sql, Dictionary<string, object> paras, Exception ex, bool isHtml, int count)
//        {
//            StringBuilder sb = new StringBuilder();
//            string sp = "<br />";
//            if (isHtml == false)
//            {
//                sp = "\r\n";
//            }
//            //\r\n不起作用
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format("{0}异常(第{1}次):", sp, count));
//            if (ex != null)
//            {
//                sb.Append(string.Format(sp + "错误信息:{0}", ex.Message));
//                sb.Append(string.Format(sp + "堆栈跟踪:{0}", ex.StackTrace));
//                if (ex.InnerException != null)
//                {
//                    sb.Append(string.Format(sp + "内部异常:{0}", ex.InnerException));
//                }
//            }
//            else
//            {
//                sb.Append(sp + "没有反馈异常信息.");
//            }
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format(sp + "报告时间：{0}", dt.ToString("yyyy-MM-dd HH:mm:ss")));
//            sb.Append(string.Format(sp + "客户端IP：{0}", SysHelper.LocalIP));
//            sb.Append(string.Format(sp + "客户端OS：{0}", Environment.OSVersion.ToString()));
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format(sp + "方法名：{0}", method));
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format(sp + "执行语句：{0}", sql));
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(sp + "参数：");
//            GetErrorParameters(paras, isHtml, sb, sp);
//            sb.Append(sp + BOUNDARY_LINE);

//            return sb.ToString();
//        }

//        private static string GetServerErrorContent(DateTime dt, string type, string msg, Exception ex, bool isHtml, int count)
//        {
//            StringBuilder sb = new StringBuilder();
//            string sp = "<br />";
//            if (isHtml == false)
//            {
//                sp = "\r\n";
//            }
//            //\r\n不起作用
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format("{0}异常(第{1}次):", sp, count));
//            if (ex != null)
//            {
//                sb.Append(string.Format(sp + "错误信息:{0}", ex.Message));
//                sb.Append(string.Format(sp + "堆栈跟踪:{0}", ex.StackTrace));
//                if (ex.InnerException != null)
//                {
//                    sb.Append(string.Format(sp + "内部异常:{0}", ex.InnerException));
//                }
//            }
//            else
//            {
//                sb.Append(sp + "没有反馈异常信息.");
//            }
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format(sp + "报告时间：{0}", dt.ToString("yyyy-MM-dd HH:mm:ss")));
//            sb.Append(string.Format(sp + "服务器IP：{0}", SysHelper.LocalIP));
//            sb.Append(string.Format(sp + "服务器OS：{0}", Environment.OSVersion.ToString()));
//            sb.Append(sp + BOUNDARY_LINE);
//            sb.Append(string.Format(sp + "类型：{0}", type));
//            sb.Append(sp + BOUNDARY_LINE);
//            if (!string.IsNullOrEmpty(msg))
//            {
//                sb.Append(string.Format(sp + "自定义消息：{0}", msg));
//                sb.Append(sp + BOUNDARY_LINE);
//            }
//            return sb.ToString();
//        }

//        /// <summary>
//        /// 获取异常参数
//        /// </summary>
//        /// <param name="paras">参数集合</param>
//        /// <param name="isHtml">是否以Html格式输出</param>
//        /// <param name="sb">字符串</param>
//        /// <param name="sp">换行符</param>
//        private static void GetErrorParameters(Dictionary<string, object> paras, bool isHtml, StringBuilder sb, string sp)
//        {
//            if (paras != null)
//            {
//                foreach (KeyValuePair<string, object> kv in paras)
//                {
//                    sb.Append(string.Format(sp + "参数名：{0}", kv.Key));
//                    if (kv.Value == DBNull.Value)
//                    {
//                        sb.Append(";类型:System.DBNull");
//                    }
//                    else if (kv.Value == null)
//                    {
//                        sb.Append(";值:null");
//                    }
//                    else
//                    {
//                        if (kv.Value is IDbDataParameter)
//                        {
//                            IDbDataParameter dp = kv.Value as IDbDataParameter;
//                            sb.Append(string.Format(";DBParameter名称:{0}", dp.ParameterName));
//                            sb.Append(string.Format(";数据类型:{0}", dp.DbType.ToString()));
//                            if (dp.Direction == ParameterDirection.Input)
//                            {
//                                sb.Append(sp + "DBParameter类型:输入");
//                            }
//                            else if (dp.Direction == ParameterDirection.Output)
//                            {
//                                sb.Append(sp + "DBParameter类型:输出");
//                            }
//                            else if (dp.Direction == ParameterDirection.InputOutput)
//                            {
//                                sb.Append(sp + "DBParameter类型:输入输出");
//                            }
//                            else if (dp.Direction == ParameterDirection.ReturnValue)
//                            {
//                                sb.Append(sp + "DBParameter类型:返回值");
//                            }
//                            sb.Append(sp + "DBParameter值:");
//                            sb.Append(GetDBParameterValue(dp, isHtml));
//                        }
//                        else if (kv.Value is DataTable)
//                        {
//                            sb.Append(GetDataTable(kv.Value as DataTable, isHtml));
//                        }
//                        else if (kv.Value is string || kv.Value.GetType().IsPrimitive)
//                        {
//                            sb.Append(string.Format(";值:{0}", kv.Value));
//                        }
//                        else
//                        {
//                            sb.Append(string.Format(";值:{0}", Newtonsoft.Json.JsonConvert.SerializeObject(kv.Value)));
//                        }
//                    }
//                }
//            }
//            else
//            {
//                sb.Append(sp + "无.");
//            }
//        }

//        private static string GetDBParameterValue(IDbDataParameter para, bool isHtml)
//        {
//            StringBuilder sb = new StringBuilder();
//            if (para.Value == DBNull.Value)
//            {
//                sb.Append("DBNull.Value");
//            }
//            else if (para.Value == null)
//            {
//                sb.Append("NULL");
//            }
//            else
//            {
//                if (para.Value is DataTable)
//                {
//                    sb.Append(GetDataTable(para.Value as DataTable, isHtml));
//                }
//                else
//                {
//                    sb.Append(string.Format("{0}", para.Value));
//                }
//            }

//            return sb.ToString();
//        }

//        private static string GetDataTable(DataTable dt, bool isHtml)
//        {
//            StringBuilder sb = new StringBuilder();
//            if (dt != null)
//            {
//                if (isHtml)
//                {
//                    sb.Append("<br /><table><thead>");
//                }
//                else
//                {
//                    sb.Append("\r\n");
//                }
//                foreach (DataColumn dc in dt.Columns)
//                {
//                    if (isHtml)
//                    {
//                        sb.Append("<th>" + dc.ColumnName + "</th>");
//                    }
//                    else
//                    {
//                        sb.Append(dc.ColumnName + "   ");
//                    }
//                }
//                if (isHtml)
//                {
//                    sb.Append("</thead>");
//                    sb.Append("<tbody>");
//                }
//                int clen = dt.Columns.Count;
//                foreach (DataRow dr in dt.Rows)
//                {
//                    if (isHtml)
//                    {
//                        sb.Append("<tr>");
//                    }
//                    else
//                    {
//                        sb.Append("\r\n");
//                    }
//                    for (int i = 0; i < clen; i++)
//                    {
//                        if (isHtml)
//                        {
//                            sb.Append(string.Format("<td>{0}</td>", dr[i]));
//                        }
//                        else
//                        {
//                            sb.Append(string.Format("{0}    ", dr[i]));
//                        }
//                    }
//                    if (isHtml)
//                    {
//                        sb.Append("</tr>");
//                    }
//                }
//                if (isHtml)
//                {
//                    sb.Append("</tbody></table>");
//                }
//            }
//            return sb.ToString();
//        }
//        #endregion
//    }
//}
